package Modelo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Vector;

public class Liga {
    
	private ArrayList<Arbitro> arbitro =new ArrayList<Arbitro>();
	private Vector<Equipo> equipo = new Vector<Equipo>();
	private ArrayList<Fecha> fechas = new ArrayList<Fecha>();
	
	public Liga(ArrayList<Arbitro> arbitro, Vector<Equipo> equipo) throws IOException {
		super();
		this.arbitro = arbitro;
		this.equipo = equipo;
	
	}
	
	public Liga() throws IOException {
		// TODO Auto-generated constructor stub
	
	    

	}
	
	public void ordenarEquipos() {
		Collections.sort(equipo);
	}
	
	
	// metodo para busqueda del arbitro
	
	public ArrayList<Arbitro> getArbitro() {
		return arbitro;
	}

	public void setArbitro(ArrayList<Arbitro> arbitro) {
		this.arbitro = arbitro;
	}

	public Vector<Equipo> getEquipo() {
		return equipo;
	}

	public void setEquipo(Vector<Equipo> equipo) {
		this.equipo = equipo;
	}

	public ArrayList<Fecha> getFechas() {
		return fechas;
	}

	public void setFechas(ArrayList<Fecha> fechas) {
		this.fechas = fechas;
	}

	public int buscarArbitro(String ced) {
		
		int pos=-1;
		System.out.println(arbitro.size());
		for(int i=0; i < arbitro.size();i++){	
		if(arbitro.get(i).getCedula()== ced)
			pos=i;
		}	
		return pos;
		
	}
	
	
// metodo para el registro de un nuevo arbitro	
	public void registrarArbitro(){
		try{
			
			BufferedReader lector= new BufferedReader(new InputStreamReader(System.in));
			String op="s";lector.readLine();
			String ced="";
			while(op.toLowerCase().equals("s")){
				System.out.println("*************************");
				System.out.println("Introduzca la cedula");
			 while(true){
				 try{
					 ced=lector.readLine();
					 break;
					 }catch(NumberFormatException e){
						 
						 System.out.println("La cedula es invalida ingrese otra");
					 }
			 }
				
			 while(buscarArbitro(ced)!=-1)
			 {
				System.out.println("La cedula ya existe") ;
				System.out.println("Ingrese otra cedula");
				while(true){
				 try{
					 ced=lector.readLine();
					 break;
					 
				 }catch(NumberFormatException e){
					 
					 System.out.println("La cedula es invalida ingrese otra");
				 }
					
					
				}
				
			 }		
			 System.out.println("Nombre");
			 String nom=lector.readLine();
			 System.out.println("Apellido");
			 String ape=lector.readLine();
			 System.out.println("Fecha de nacimiento");
			 String fechas=lector.readLine();
			 System.out.println("Cantidad de partidos");
			 int cantidad=Integer.parseInt(lector.readLine());
			 arbitro.add(new Arbitro(ced,nom,ape,fechas,cantidad));
			 System.out.println("Desea registrar otro arbitro s/n");
			 op=lector.readLine();
			}
			
		}
		catch(IOException e){
			
			e.printStackTrace();
		}
	}
 

// metodo para la busqueda de un equipo	
public int buscarEquipo(String  codigo) {
		int pos=-1;
		for(int i=0; i < equipo.size();i++){
		
		if(equipo.get(i).getCodigo().equals(codigo)){
			pos=i;
		}	
		}
		return pos;
		
	}


// metodo para registrar equipos
	public void registrarEquipo(){
		try{
			
			BufferedReader lector= new BufferedReader(new InputStreamReader(System.in));
			String op="s";lector.readLine();
			String codigo="";
			while(op.toLowerCase().equals("s")){
				System.out.println("*************************");
				System.out.println("Introduzca el codigo del equipo");
			 while(true){
				 try{
					 codigo=lector.readLine();
					 break;
					 }catch(NumberFormatException e){
						 
						 System.out.println("el codigo es invalida ingrese otra");
					 }
			 }
				
			 while(buscarEquipo(codigo)!=-1)
			 {
				System.out.println("el codigo ya existe") ;
				System.out.println("Ingrese otro codigo");
				while(true){
				 try{
					 codigo=lector.readLine();
					 break;
					 
				 }catch(NumberFormatException e){
					 
					 System.out.println("El codigo es invalido ingrese otra");
				 }
					
					
				}
				
			 }		
			 System.out.println("Nombre");
			 String nombre=lector.readLine();
			 System.out.println("Ano de fundado");
			 String anno=lector.readLine();
			 System.out.println("Ciudad");
			 String ciudad=lector.readLine();
			 System.out.println("Nombre del estadio");
			 String estadio=lector.readLine();
			 System.out.println("Juegos jugados");
			 int fechasJugados=Integer.parseInt(lector.readLine());
			 System.out.println("Juegos ganados");
			 int fechasGanados=Integer.parseInt(lector.readLine());
			 System.out.println("Juegos empatados");
			 int fechasEmpatados=Integer.parseInt(lector.readLine());
			 System.out.println("Juegos perdidos");
			 int fechasPerdidos=Integer.parseInt(lector.readLine());
			 System.out.println("Goles a favor");
			 int golesFavor=Integer.parseInt(lector.readLine());
			 System.out.println("Goles en contra");
			 int golesContra=Integer.parseInt(lector.readLine());
			 equipo.add(new Equipo(codigo,nombre,anno,ciudad,estadio, fechasJugados,fechasGanados,fechasEmpatados,fechasPerdidos,golesFavor,golesContra, golesContra));
			 System.out.println("Desea registrar otro arbitro s/n");
			 op=lector.readLine();
			}
			
		}
		catch(IOException e){
			
			e.printStackTrace();
		}
	}
	
	public void generarCombinacion(){
	     Date d,d1;
	     Equipo e1,e2;
	     d= new Date();
	     SimpleDateFormat sdf = new SimpleDateFormat("dd");
	     Partido p;
	     List<Partido> partidos = new ArrayList<Partido>();
	     Fecha fIda,fVuelta;
	     fechas.clear();
	     int h=0;
	     Random r = new Random();
	     while(h<equipo.size()-1){
	    	fIda= new Fecha();
	 		fVuelta= new Fecha();
	 		for(int i=0;(i<equipo.size()-1 && (fIda.getPartidos().size()!=(equipo.size()/2)));++i){	
	 			for(int j=i+1;(j<equipo.size() && (fIda.getPartidos().size()!=(equipo.size()/2)) );++j){
	 				if(!fIda.buscarEquipo(equipo.get(i).getCodigo()) && !fIda.buscarEquipo(equipo.get(j).getCodigo())){
	 					if(!fechas.isEmpty()){
	 						for(Fecha f: fechas){
	 							if(!f.buscarPartido(equipo.get(i).getCodigo(),equipo.get(j).getCodigo())){
	 								p = new Partido("Ida "+(i*j), equipo.get(i), equipo.get(j), arbitro.get(r.nextInt(arbitro.size())), 0);
	 			//						p.setArbitro(new Arbitro());
	 									fIda.getPartidos().add(p);
	 									p = new Partido("Vuelta "+(i*j),  equipo.get(j), equipo.get(i), arbitro.get(r.nextInt(arbitro.size())), 0);
	 			//					p.setArbitro(new Arbitro());
	 									fVuelta.getPartidos().add(p);
	 									break;
	 							}
	 							else;
	 						}
	 					}
	 					else{
	 						p = new Partido("Ida "+(i*j), equipo.get(i), equipo.get(j), arbitro.get(r.nextInt(arbitro.size())), 0);
	 						p.setArbitro(new Arbitro());
	 						fIda.getPartidos().add(p);
	 						p = new Partido("Vuelta "+(i*j),  equipo.get(j), equipo.get(i), arbitro.get(r.nextInt(arbitro.size())), 0);
	 						p.setArbitro(new Arbitro());
	 						fVuelta.getPartidos().add(p);
	 					}
	 				}
	 			}
	 		}
	 		fechas.add(fIda);
	 		fechas.add(fVuelta);
	 		d1=new Date(d.getYear(),d.getMonth(),Integer.parseInt(sdf.format(d))+((equipo.size()-2)*7));
	 		fIda.setFecha(d);
	 		fVuelta.setFecha(d1);
	 		d=new Date(d.getYear(),d.getMonth(),Integer.parseInt(sdf.format(d))+7);
	 		h++;
	 		}
	}

	public void generarResultados() {
		for (Fecha f : fechas) {
			f.generarResultados();
		}
		
	}	
	

}
